home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / e / ProgSuite.lha / ProgSuite / Control.e < prev    next >
Text File  |  1996-09-09  |  2KB  |  59 lines

  1. /* Control - ProgSuite V1.0 Control program */
  2.  
  3. MODULE 'amigalib/ports', 'dos/dos'
  4. MODULE 'exec/memory', 'exec/nodes', 'exec/ports'
  5.  
  6. MODULE '*Defs'
  7.  
  8. /* Variable to hold our own name (should be a constant...) */
  9. DEF progname: PTR TO CHAR
  10.  
  11. /* Communications variables */
  12. DEF controlport = NIL: PTR TO mp,
  13.     wakemsg = NIL: PTR TO portMessage, recvmsg: PTR TO portMessage
  14.  
  15. PROC main () HANDLE
  16.   progname := 'Control'
  17.   controlport := portCreate ('ControlPort', progname)
  18.   wakemsg := messageCreate (controlport, progname)
  19.   wakemsg.msn := WAKEMSG  -> Our WakeUp message
  20.  
  21.   -> Control will wait for a QUIT message and reply it,
  22.   -> and then exit
  23.  
  24.   -> Report our readyness to the master
  25.   WriteF ('\s: Sending WakeUp message (\d) to Master...\n', progname, wakemsg.msn)
  26.   IF FALSE = messageSend (wakemsg, 'MasterPort') THEN Raise (ERR_FINDPORT)
  27.  
  28.   -> Do our job
  29.   controlLoop ()
  30.  
  31.   Raise (ERR_NONE)
  32. EXCEPT DO
  33.   IF controlport THEN portRemove (controlport)
  34.   IF wakemsg THEN Dispose (wakemsg)
  35.   SELECT exception
  36.   CASE "PORT"
  37.     WriteF ('\s: Can''t create messageport "ControlPort"!\n', progname)
  38.   CASE ERR_FINDPORT
  39.     WriteF ('\s: Can''t find messageport "MasterPort": This program should be started from Master!', progname)
  40.   CASE "MEM"
  41.     WriteF ('\s: Can''t get memory!\n', progname)
  42.   ENDSELECT
  43. ENDPROC
  44.  
  45. /* The main message loop */
  46.  
  47. PROC controlLoop ()
  48.  
  49.   REPEAT
  50.     -> (for now, wait for the QUIT message)
  51.     WaitPort (controlport)
  52.     IF recvmsg := GetMsg (controlport)
  53.       messageCheckOwn (recvmsg, controlport, progname)
  54.       messageReply (recvmsg, controlport)
  55.     ENDIF
  56.   UNTIL recvmsg.msn = QUITCONTRMSG
  57.  
  58. ENDPROC
  59.